#!/usr/bin/enr/python3
# -*- coding: utf-8 -*-
# -------------------------------
# @Author : hurong
# @File : 1105_p01闭包.py
# @Time : 2023/11/15 19:35
# -------------------------------
'''
1. 闭包
# 01.  函数引用：地址
函数引用英语场景一般在函数的参数或返回值中使用
'''
# 01 函数引用
# def show():
#     print("Show Run...")
# #     函数默认有个空的返回值，return None,可写可不写
#     return None

# # 函数调用,执行show函数时，会跳转到函数体内进行执行；并指向开辟的内存空间
# show()
# # func1可看作表达式，有2个运算符，=和（）；运算符中优先级别最高的是（）
# func1 = show()
# print(f"打印fun1 的值{func1}")    # 返回值，是None
#
# func2 = show
# func2()

# def callback(func):
#     func()

# # 正确写法
# callback(show)
# 错误写法
# callback(show())
'''运行结果会报错，如下：
Traceback (most recent call last):
  File "D:\study\Huogewozi\git_prac\git-demo\pythonCode\1105面向对象.py", line 32, in <module>
    callback(show())
  File "D:\study\Huogewozi\git_prac\git-demo\pythonCode\1105面向对象.py", line 29, in callback
    func()
TypeError: 'NoneType' object is not callable
'''

# 定义一个闭包函数：两层函数嵌套，内函数引用以及外函数的执行环境整体称之为闭包函数
def outer():
    a = 100
    def inner():
        b = 200
        print("a = ",a)
        print("b = ",b)
    return inner

func = outer()   # 输出返回是空；func = inner

func()    # inner()
# 运行结果
# a =  100
# b =  200